#!/bin/sh

MODNAME=l2tpPseudowire

. /opt/$MODNAME/etc/settings
[ "$MOD_L2TPPSEUDOWIRE_ENABLED" != "1" ] && echo "skipped" && exit 0

if [ "$MOD_L2TPPSEUDOWIRE_ENCAP" = "udp" ]; then
  UDP_SPORT="udp_sport $MOD_L2TPPSEUDOWIRE_UDP_SPORT"
  UDP_DPORT="udp_dport $MOD_L2TPPSEUDOWIRE_UDP_DPORT"
fi
[ -n "$MOD_L2TPPSEUDOWIRE_COOKIE" ] && COOKIE="cookie $MOD_L2TPPSEUDOWIRE_COOKIE"
[ -n "$MOD_L2TPPSEUDOWIRE_PEER_COOKIE" ] && PEER_COOKIE="peer_cookie $MOD_L2TPPSEUDOWIRE_PEER_COOKIE"

/sbin/ip l2tp add tunnel tunnel_id $MOD_L2TPPSEUDOWIRE_TUNNEL_ID \
         peer_tunnel_id $MOD_L2TPPSEUDOWIRE_PEER_TUNNEL_ID \
         encap $MOD_L2TPPSEUDOWIRE_ENCAP \
         local $MOD_L2TPPSEUDOWIRE_LOCAL_ADDR \
         remote $MOD_L2TPPSEUDOWIRE_REMOTE_ADDR \
         $UDP_SPORT \
         $UDP_DPORT

/sbin/ip l2tp add session tunnel_id $MOD_L2TPPSEUDOWIRE_TUNNEL_ID \
         session_id $MOD_L2TPPSEUDOWIRE_SESSION_ID \
         peer_session_id $MOD_L2TPPSEUDOWIRE_PEER_SESSION_ID \
         $COOKIE \
         $PEER_COOKIE \
         l2spec_type $MOD_L2TPPSEUDOWIRE_L2SPEC_TYPE

if [ "$MOD_L2TPPSEUDOWIRE_BRIDGED" = "0" ]; then
  # IP Interfaces
  /sbin/ip link set l2tpeth0 up mtu 1488
  /sbin/ip addr add $MOD_L2TPPSEUDOWIRE_LOCAL_IF_ADDR/30 \
           peer $MOD_L2TPPSEUDOWIRE_REMOTE_IF_ADDR/30 dev l2tpeth0
else
  # Bridged interfaces
  /sbin/ip link | grep -q br0; BRIDGE_IF=$?
  if [ "$BRIDGE_IF" != "0" ]; then
    /usr/bin/logger -t "L2TP Pseudowire" -p daemon.err "br0 interface not found!"
    exit 1
  fi
  /sbin/ip link set l2tpeth0 up mtu 1446
  /sbin/ip link set l2tpeth0 master br0
fi

exit $?
